<?php


/**
 * 监听用户断开连接事件
 */
$serv->on('Close', function($server, $fd) {

    //将用户从在线列表移除
    unset($GLOBALS['userlist'][$fd]);

    //将用户从连接池移除
    foreach ($GLOBALS['fds'] as $k => $v) {
        if ($v == $fd) {
            unset($GLOBALS['fds'][$k]);
            shuffle($GLOBALS['fds']);
        }
    }
    
    //将用户从房间游戏顺序列表移除 顺便获取房间ID
    foreach ($GLOBALS['rooms'] as $k => $v) {
        foreach ($v as $u => $y) {
            if ($y['fd'] == $fd) {
                unset($GLOBALS['rooms'][$k][$u]);
                shuffle($GLOBALS['rooms'][$k]);
                //如果座位A是我
                if ($GLOBALS['hall'][$k]['user_a'] == $fd) {
                    //如果在游戏时间逃跑 马上结算游戏
                    if ($GLOBALS['hall'][$k]['status'] == 'on') {
                        $res = gameOver($k, $GLOBALS['hall'][$k]['user_a_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_a_nick']]);
                        //游戏结束消息广播到整个房间 更新用户状态
                        foreach ($GLOBALS['rooms'][$k] as $q) {
                            $GLOBALS['userlist'][$q['fd']]->status = '等待';
                            $server->push($q['fd'], 'gameover'.json_encode($res));
                        }
                    }

                    //座位信息初始化
                    $GLOBALS['hall'][$k]['user_a'] = 'off';
                    $GLOBALS['hall'][$k]['user_a_nick'] = 'off';
                    $GLOBALS['hall'][$k]['user_a_status'] = 'off';
                    $GLOBALS['hall'][$k]['user_a_identity'] = 'off';
                    $GLOBALS['hall'][$k]['user_a_pokers'] = '';
                    $GLOBALS['hall'][$k]['round_type'] = 'off';
                    //更新座位信息到全局
                    foreach ($GLOBALS['rooms'][$k] as $e) {
                        $server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));
                    }

                //如果座位B是我
                } else if ($GLOBALS['hall'][$k]['user_b'] == $fd) {
                    //如果在游戏时间逃跑 马上结算游戏
                    if ($GLOBALS['hall'][$k]['status'] == 'on') {
                        $res = gameOver($k, $GLOBALS['hall'][$k]['user_b_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_b_nick']]);
                        //游戏结束消息广播到整个房间 更新用户状态
                        foreach ($GLOBALS['rooms'][$k] as $q) {
                            $GLOBALS['userlist'][$q['fd']]->status = '等待';
                            $server->push($q['fd'], 'gameover'.json_encode($res));
                        }
                    }

                    $GLOBALS['hall'][$k]['user_b'] = 'off';
                    $GLOBALS['hall'][$k]['user_b_nick'] = 'off';
                    $GLOBALS['hall'][$k]['user_b_status'] = 'off';
                    $GLOBALS['hall'][$k]['user_b_identity'] = 'off';
                    $GLOBALS['hall'][$k]['user_b_pokers'] = '';
                    $GLOBALS['hall'][$k]['round_type'] = 'off';
                    foreach ($GLOBALS['rooms'][$k] as $e) {
                        $server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));
                    }
                    
                //如果座位C是我
                } else if ($GLOBALS['hall'][$k]['user_c'] == $fd) {
                    //如果在游戏时间逃跑 马上结算游戏
                    if ($GLOBALS['hall'][$k]['status'] == 'on') {
                        $res = gameOver($k, $GLOBALS['hall'][$k]['user_c_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_c_nick']]);
                        //游戏结束消息广播到整个房间 更新用户状态
                        foreach ($GLOBALS['rooms'][$k] as $q) {
                            $GLOBALS['userlist'][$q['fd']]->status = '等待';
                            $server->push($q['fd'], 'gameover'.json_encode($res));
                        }
                    }
                    $GLOBALS['hall'][$k]['user_c'] = 'off';
                    $GLOBALS['hall'][$k]['user_c_nick'] = 'off';
                    $GLOBALS['hall'][$k]['user_c_status'] = 'off';
                    $GLOBALS['hall'][$k]['user_c_identity'] = 'off';
                    $GLOBALS['hall'][$k]['user_c_pokers'] = '';
                    $GLOBALS['hall'][$k]['round_type'] = 'off';
                    foreach ($GLOBALS['rooms'][$k] as $e) {
                        $server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));
                    }
                }
            }
        }
    }

    //向大厅的所有用户推送最新的在线人数 和 大厅座位情况
    foreach ($GLOBALS['fds'] as $v) {
        //推送玩家列表更新
        $server->push($v, 'pulllist'.json_encode($GLOBALS['userlist']));
        //推送大厅信息更新
        $server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));
    }

});